Page({
  // 页面数据
  data: {
    shoppingData: [], // 购物车数据
    totalPrice: 0, // 总价
    allChecked: false, // 全选状态
    checkedCount: 0 // 选中数量
  },

  // 页面加载时执行的函数
  onLoad() {
    this.getValue(); // 获取本地存储的购物车数据
  },

  // 从本地存储获取购物车数据
  getValue() {
    let back = wx.getStorageSync('cartData') || []; // 从本地存储获取数据，如果没有则为空数组
    if (Array.isArray(back)) {
      this.setData({
        shoppingData: back // 更新页面数据
      });
    } else {
      this.setData({
        shoppingData: [] // 设置为空数组或其他默认值
      });
    }
    this.totalPrice(); // 更新商品总价
  },

  // 页面显示时执行的函数
  onShow() {
    this.getValue(); // 页面显示时更新购物车数据
    this.updateCheckStatus(); // 更新全选状态
  },

  // 计算商品总价
  totalPrice() {
    let sum = 0,
        checkedCount = 0;
    this.data.shoppingData.forEach((item) => {
      if (item.checked) {
        sum += item.price * item.num; // 计算选中商品的总价
        checkedCount += 1; // 统计选中的商品数量
      }
    });
    this.setData({
      totalPrice: sum, // 更新页面显示的总价
      checkedCount: checkedCount // 更新选中的商品数量
    });
  },

  // 更新全选状态
  updateCheckStatus() {
    if (this.data.checkedCount === this.data.shoppingData.length) {
      this.setData({
        allChecked: true // 全部商品都被选中时，设置全选状态为true
      });
    } else {
      this.setData({
        allChecked: false // 存在未选中的商品时，设置全选状态为false
      });
    }
  },

  // 全选或取消全选
  allChecked() {
    let allChecked = !this.data.allChecked; // 取反当前全选状态
    this.setData({
      allChecked: allChecked // 更新页面显示的全选状态
    });
    this.data.shoppingData.forEach((item, index) => {
      this.setData({
        [`shoppingData[${index}].checked`]: allChecked // 更新每个商品的选中状态
      });
    });
    this.totalPrice(); // 更新商品总价
    this.updateCartDataStorage(); // 更新本地存储的购物车数据
  },

  // 单选或取消单选
  checked(e) {
    let index = e.currentTarget.dataset.index; // 获取商品索引
    this.setData({
      [`shoppingData[${index}].checked`]: !this.data.shoppingData[index].checked // 取反当前商品的选中状态
    });
    this.totalPrice(); // 更新商品总价
    this.updateCheckStatus(); // 更新全选状态
    this.updateCartDataStorage(); // 更新本地存储的购物车数据
  },

  // 删除商品
  delList(e) {
    let index2 = e.currentTarget.dataset.index; // 获取要删除的商品索引
    let newList = this.data.shoppingData.filter((item, index) => index !== index2); // 过滤掉要删除的商品
    this.setData({
      shoppingData: newList // 更新购物车数据
    }, () => {
      this.totalPrice(); // 更新商品总价
      this.updateCheckStatus(); // 更新全选状态
      this.updateCartDataStorage(); // 更新本地存储的购物车数据
    });
  },

  // 增加商品数量
  addNum(e) {
    let index = e.currentTarget.dataset.index; // 获取商品索引
    let shoppingData = this.data.shoppingData;
    if (index >= 0 && index < shoppingData.length) {
      let item = shoppingData[index];
      if (item.num < 10) { // 确保数量不会超过10
        item.num++; // 增加商品数量
        this.setData({
          [`shoppingData[${index}].num`]: item.num // 更新页面显示的商品数量
        });
        this.totalPrice(); // 更新商品总价
        this.updateCartDataStorage(); // 更新本地存储的购物车数据
      }
    }
  },

  // 减少商品数量
  minusNum(e) {
    let index = e.currentTarget.dataset.index; // 获取商品索引
    let shoppingData = this.data.shoppingData;
    if (index >= 0 && index < shoppingData.length) {
      let item = shoppingData[index];
      if (item.num > 1) { // 确保数量不会少于1
        item.num--; // 减少商品数量
        this.setData({
          [`shoppingData[${index}].num`]: item.num // 更新页面显示的商品数量
        });
        this.totalPrice(); // 更新商品总价
        this.updateCartDataStorage(); // 更新本地存储的购物车数据
      }
    }
  },

  // 更新本地存储的购物车数据
  updateCartDataStorage() {
    wx.setStorageSync('cartData', this.data.shoppingData); // 存储购物车数据到本地存储
  },

  // 跳转到结算页面
  toText() {
    let selectedItems = this.data.shoppingData.filter(item => item.checked); // 获取选中的商品
    wx.setStorageSync('selectedData', selectedItems); // 存储选中的商品到本地存储
    wx.navigateTo({
      url: '/pages/text/text' // 跳转到结算页面
    });
  }
});
